
package arreglos;

import accesoarchivos.EmpleadoArchivo;
import constantes.Constantes;
import entidades.Empleado;
import entidades.Producto;

import java.util.ArrayList;


public class EmpleadoArrayList {

    ArrayList<Empleado> listadoEmpleados = null;
    EmpleadoArchivo empleadoArchivo = null;

    public EmpleadoArrayList() {

        listadoEmpleados = new ArrayList<Empleado>();
        empleadoArchivo = new EmpleadoArchivo();
        listadoEmpleados = empleadoArchivo.LeerArchivoEmpleado();

    }

    public ArrayList<Empleado> ListadoEmpleados() {
        ArrayList<Empleado> listado = null;
        try {
            listado = new ArrayList<Empleado>();
            listado = listadoEmpleados;
        } catch (Exception ex) {
        }
        return listado;
    }

    private int ObtenerCodigoParaInsertar() {
        int codigo = 0;
        try {
            ArrayList<Empleado> arraylist = new ArrayList<Empleado>();
            arraylist = listadoEmpleados;

            int numeroEmpleados = arraylist.size();
            if (numeroEmpleados == 0) {
                codigo = 1;
            } else {

                for (Empleado empleado : listadoEmpleados) {
                    codigo = Integer.parseInt(empleado.getCodigo());
                }
                codigo = codigo + 1;
            }
        } catch (Exception ex) {
        }
        return codigo;
    }

    public int AgregarEmpleado(Empleado empleado) {
        int codigo = 0;
        try {
            codigo = ValidarDni_A_Insertar(empleado);
            if (codigo != Constantes.ERROR_YA_EXISTE_DNI_AGREGAR) {
                codigo = ValidarLogin_A_Insertar(empleado);
                if (codigo != Constantes.ERROR_YA_EXISTE_LOGIN_USUARIO_AGREGAR) {
                    codigo = ObtenerCodigoParaInsertar();
                    empleado.setCodigo(codigo + "");
                    listadoEmpleados.add(empleado);
                    empleadoArchivo.EscribirArchivoEmpleado(listadoEmpleados);
                }
            }

        } catch (Exception ex) {
        }
        return codigo;
    }



    public int EliminarEmpleado(Empleado empleado) {
        int codigo = 0;
        try {

            int indiceArreglo = 0;
            for (Empleado entidad : listadoEmpleados) {
                if (entidad.getCodigo().equals(empleado.getCodigo()) &&
                        entidad.getEstadoEmpleado().trim().equals(Constantes.EMPLEADO_HABILITADO + "")) {
                    listadoEmpleados.remove(indiceArreglo);
                    listadoEmpleados.add(indiceArreglo, empleado);
                    break;
                }
                indiceArreglo++;
            }
            empleadoArchivo.EscribirArchivoEmpleado(listadoEmpleados);

            codigo = Constantes.SE_ELIMINO_CORRECTAMENTE_EMPLEADO;

        } catch (Exception ex) {
        }
        return codigo;
    }

    private int ValidarDni_A_Insertar(Empleado pEmpleado) {
        int codigo = 0;
        try {
            ArrayList<Empleado> arraylist = new ArrayList<Empleado>();
            arraylist = listadoEmpleados;

            for (Empleado empleado : arraylist) {
                if (empleado.getDni().equals(pEmpleado.getDni()) &&
                        empleado.getEstadoEmpleado().trim().equals(Constantes.EMPLEADO_HABILITADO + "")) {
                    codigo = Constantes.ERROR_YA_EXISTE_DNI_AGREGAR;
                }
            }
        } catch (Exception ex) {
        }
        return codigo;
    }

    private int ValidarLogin_A_Insertar(Empleado pEmpleado) {
        int codigo = 0;
        try {
            ArrayList<Empleado> arraylist = new ArrayList<Empleado>();
            arraylist = listadoEmpleados;

            for (Empleado empleado : arraylist) {
                if (empleado.getLogin().equals(pEmpleado.getLogin()) &&
                        empleado.getEstadoEmpleado().trim().equals(Constantes.EMPLEADO_HABILITADO + "")) {
                    codigo = Constantes.ERROR_YA_EXISTE_LOGIN_USUARIO_AGREGAR;
                }
            }
        } catch (Exception ex) {
        }
        return codigo;
    }

    public Empleado BuscarDatosEmpleadoVendedor(Empleado pEmpleado) {
        String codigoEmpleado = "";
        Empleado empleadoEncontrado = null;
        try {
            empleadoEncontrado = new Empleado();
            codigoEmpleado = pEmpleado.getCodigo().trim();
            ArrayList<Empleado> arraylist = new ArrayList<Empleado>();
            arraylist = listadoEmpleados;

            for (Empleado empleado : arraylist) {
                if (empleado.getCodigo().trim().equals(codigoEmpleado) &&
                        empleado.getPerfilEmpleado().trim().equals(Constantes.perfilVendedor + "") &&
                        empleado.getEstadoEmpleado().trim().equals(Constantes.EMPLEADO_HABILITADO + "")) {
                    empleadoEncontrado.setCodigo(codigoEmpleado);
                    empleadoEncontrado.setNombre(empleado.getNombre());
                    empleadoEncontrado.setApellidoPaterno(empleado.getApellidoPaterno());
                    empleadoEncontrado.setApellidoMaterno(empleado.getApellidoMaterno());
                    empleadoEncontrado.setDni(empleado.getDni());
                    empleadoEncontrado.setDireccion(empleado.getDireccion());
                    empleadoEncontrado.setTelefono(empleado.getTelefono());
                    empleadoEncontrado.setEmail(empleado.getEmail());
                    empleadoEncontrado.setFechaNacimiento(empleado.getFechaNacimiento());
                    empleadoEncontrado.setLogin(empleado.getLogin());
                    empleadoEncontrado.setClaveAccesoSistema(empleado.getClaveAccesoSistema());
                    empleadoEncontrado.setPerfilEmpleado(empleado.getPerfilEmpleado());
                    empleadoEncontrado.setEstadoEmpleado(empleado.getEstadoEmpleado());
                    break;
                }
            }
        } catch (Exception ex) {
        }
        return empleadoEncontrado;
    }
    public Empleado BuscarDatosEmpleadoPorCodigo(Empleado pEmpleado) {
        String codigoEmpleado = "";
        Empleado empleadoEncontrado = null;
        try {
            empleadoEncontrado = new Empleado();
            codigoEmpleado = pEmpleado.getCodigo().trim();
            ArrayList<Empleado> arraylist = new ArrayList<Empleado>();
            arraylist = listadoEmpleados;

            for (Empleado empleado : arraylist) {
                if (empleado.getCodigo().trim().equals(codigoEmpleado)) {
                    empleadoEncontrado.setCodigo(codigoEmpleado);
                    empleadoEncontrado.setNombre(empleado.getNombre());
                    empleadoEncontrado.setApellidoPaterno(empleado.getApellidoPaterno());
                    empleadoEncontrado.setApellidoMaterno(empleado.getApellidoMaterno());
                    empleadoEncontrado.setDni(empleado.getDni());
                    empleadoEncontrado.setDireccion(empleado.getDireccion());
                    empleadoEncontrado.setTelefono(empleado.getTelefono());
                    empleadoEncontrado.setEmail(empleado.getEmail());
                    empleadoEncontrado.setFechaNacimiento(empleado.getFechaNacimiento());
                    empleadoEncontrado.setLogin(empleado.getLogin());
                    empleadoEncontrado.setClaveAccesoSistema(empleado.getClaveAccesoSistema());
                    empleadoEncontrado.setPerfilEmpleado(empleado.getPerfilEmpleado());
                    empleadoEncontrado.setEstadoEmpleado(empleado.getEstadoEmpleado());
                    break;
                }
            }
        } catch (Exception ex) {
        }
        return empleadoEncontrado;
    }

    public Empleado BuscarDatosEmpleadoPorLogin(Empleado pEmpleado) {
        String loginEmpleado = "";
        Empleado empleadoEncontrado = null;
        try {
            empleadoEncontrado = new Empleado();
            loginEmpleado = pEmpleado.getLogin().trim();
            ArrayList<Empleado> arraylist = new ArrayList<Empleado>();
            arraylist = listadoEmpleados;

            for (Empleado empleado : arraylist) {
                if (empleado.getLogin().trim().equals(loginEmpleado) &&
                        empleado.getEstadoEmpleado().trim().equals(Constantes.EMPLEADO_HABILITADO + "")) {
                    empleadoEncontrado.setCodigo(empleado.getCodigo());
                    empleadoEncontrado.setNombre(empleado.getNombre());
                    empleadoEncontrado.setApellidoPaterno(empleado.getApellidoPaterno());
                    empleadoEncontrado.setApellidoMaterno(empleado.getApellidoMaterno());
                    empleadoEncontrado.setDni(empleado.getDni());
                    empleadoEncontrado.setDireccion(empleado.getDireccion());
                    empleadoEncontrado.setTelefono(empleado.getTelefono());
                    empleadoEncontrado.setEmail(empleado.getEmail());
                    empleadoEncontrado.setFechaNacimiento(empleado.getFechaNacimiento());
                    empleadoEncontrado.setLogin(empleado.getLogin());
                    empleadoEncontrado.setClaveAccesoSistema(empleado.getClaveAccesoSistema());
                    empleadoEncontrado.setPerfilEmpleado(empleado.getPerfilEmpleado());
                    empleadoEncontrado.setEstadoEmpleado(empleado.getEstadoEmpleado());
                    break;
                }
            }
        } catch (Exception ex) {
        }
        return empleadoEncontrado;
    }
    
    public int ModificarEmpleado(Empleado empleado) {
        int codigo = 0;
        try {
                              
          
                int indiceArreglo = 0;
                for (Empleado entidad : listadoEmpleados) {

                    if (entidad.getCodigo().equals(empleado.getCodigo())) {
                    	listadoEmpleados.remove(indiceArreglo);
                    	listadoEmpleados.add(indiceArreglo, empleado);
                        break;
                    }
                    indiceArreglo++;
                }
                empleadoArchivo.EscribirArchivoEmpleado(listadoEmpleados);
          
            
        } catch (Exception ex) {
        }
        return codigo;
    }
}
